package editor3d;
import java.util.*;
/**
* Clase que genera y guarda la tabla de simbolos
*/
public class TablaSimbolo extends LinkedList <Simbolo>{

	/**
	* Coloca un nuevo simbolo en la tabla de simbolos
	* @param sim Simbolo nuevo que se insertara
	*/

	public void addItem(Simbolo sim){
		add(sim);
	}

	public boolean linkEquals(LinkedList <Param> una, LinkedList <Param> dos){
		int cont = 0;
		if(una.size() == dos.size()){
			for(int i = 0; i< una.size(); i++){
				Param u = una.get(i);
				Param d = dos.get(i);
				if(u.tipo == d.tipo && u.clase == d.clase && u.size == d.size){
					if(u.claseStr == null && d.claseStr == null)
						cont++;
					else if (u.claseStr.equals(d.claseStr))
						cont++;
				}
			}
			if(cont == una.size())
				return true;
		}
		return false;
	}

	/**
	* Busca un simbolo por su nombre
	* @param nombre El nombre del simbolo que busca
	* @return Regresa un objeto simbolo si lo encuentra o null si no
	*/
	public Simbolo searchSimbol(String nombre){
		for(int i = 0; i< size(); i++){
			Simbolo sim = get(i);
			if(sim.getNombre().equals(nombre))
				return sim;
		}
		return null;
	}

	/**
	* Actualiza un simbolo por su nombre
	* @param simb El simbolo a actualizar
	* @return Nada
	*/
	public void updateSimbol(Simbolo simb){
		for(int i = 0; i< size(); i++){
			Simbolo sim = get(i);
			if(sim.getNombre().equals(simb.getNombre()))
				sim = simb;
		}
	}
        
	/**
	* Obtiene la dimension de un simbolo
	*/
	public int getDimAtFrom(String nombre, int pos){
		for(int i = 0; i< size(); i++){
			Simbolo sim = get(i);
			if(sim.getNombre().equals(nombre))
				return sim.getDimAt(pos);
		}
		return -1;
	}

	/**
	* Muestra la tabla de simbolos en un String
	* @return La tabla de simbolos
	*/
	@Override
	public String toString(){
		String temp = "";
		for(int i = 0; i< size(); i++)
			temp += get(i)+"\n";
		return temp;
	}
}
